package exec;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @Description 给你一个整数数组 nums ，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
 * @Date 2022/10/28 17:11
 * @Created by wangjun
 */
public class SingleNumber {

    public static void main(String[] args) {
        System.out.println(singleNumber(new int[]{0, 1, 0, 1, 0, 1, 100}));

//        Map<Integer, Integer> map = new HashMap<>(10);
//        map.put(1, 1);
//        map.put(2, 1);
//        map.put(3, 1);
//        map.put(4, 1);
//
//        System.out.println(map.getOrDefault(5, 0));

    }

    /**
     * 功能描述: 给你一个整数数组 nums ，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
     * <p>
     * 输入：nums = [2,2,3,2]
     * 输出：3
     * <p>
     * 输入：nums = [0,1,0,1,0,1,100]
     * 输出：100
     *
     * @Param: nums 数组
     * @Return: int
     */
    public static int singleNumber(int[] nums) {
        if (nums.length == 0) {
            return 0;
        }
        Map<Integer, Integer> map = new HashMap<>(nums.length);
        for (int n : nums) {
            map.put(n, map.getOrDefault(n, 0) + 1);
        }
        int number = 0;
        Set<Map.Entry<Integer, Integer>> entries = map.entrySet();
        for (Map.Entry<Integer, Integer> m : entries) {
            if (m.getValue() == 1) {
                number = m.getKey();
                break;
            }
        }
        return number;
    }
}
